/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package xml2postgreconvertor;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author swosh
 */
public class UliceDAO {

    protected Logger log = Logger.getLogger(getClass().getName());

    public void saveUlice(Ulice ulice) throws Exception {
        Connection connection;
        if (ulice == null || ulice.getNazObce() == null ||
                ulice.getNazCastiObce() == null || ulice.getNazUlice() == null) {
            throw new Exception("Ulice není správně definována. Má tyto hodnoty: " + ulice.toStringNotEndDot());
        }
        try {
            connection = ConnectionFactoryMyEditAdmin.getConnection();
        } catch (SQLException ex) {
            Logger.getLogger(UliceDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new Exception("Chyba při spojení: " + ex.getMessage() + " Ulice má tyto hodnoty: " + ulice.toStringNotEndDot());
        }
        PreparedStatement ps = null;
        int isInserted = 0;

        String query = "INSERT INTO ulice (naz_ulice, naz_casti_obce, naz_obce) VALUES (?,?,?);";

        String nazUlice = ulice.getNazUlice();
        String nazCastiObce = ulice.getNazCastiObce();
        String nazObce = ulice.getNazObce();

        try {
            ps = connection.prepareStatement(query);
            ps.setString(1, nazUlice);
            ps.setString(2, nazCastiObce);
            ps.setString(3, nazObce);
            isInserted = ps.executeUpdate();
            connection.commit();
            if (isInserted == 0) {
                throw new Exception("Chyba při ukládání. Ulice má tyto hodnoty: " + ulice.toStringNotEndDot());
            }

        } catch (SQLException e) {
            rollback(connection);
            throw new Exception("Chyba v databázi: " + e.getMessage() + " Ulice má tyto hodnoty: " + ulice.toStringNotEndDot());
        } finally {
            DBUtil.closePreparedStatement(ps);
            ConnectionFactoryMyEditAdmin.close(connection);

        }
    }

    public void saveObec(Ulice ulice) throws Exception {
        Connection connection;
        if (ulice == null || ulice.getNazObce() == null) {
            throw new Exception("Obec není správně definována. Má tyto hodnoty: " + ulice.toStringNotEndDot());
        }
        try {
            connection = ConnectionFactoryMyEditAdmin.getConnection();
        } catch (SQLException ex) {
            Logger.getLogger(UliceDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new Exception("Chyba při spojení: " + ex.getMessage() + " Obec má tyto hodnoty: " + ulice.toStringNotEndDot());
        }
        PreparedStatement ps = null;
        int isInserted = 0;

        String query = "INSERT INTO obec (naz_obce) VALUES (?);";

        String nazObce = ulice.getNazObce();

        try {
            ps = connection.prepareStatement(query);
            ps.setString(1, nazObce);
            isInserted = ps.executeUpdate();
            connection.commit();
            if (isInserted == 0) {
                throw new Exception("Chyba při ukládání. Obec má tyto hodnoty: " + ulice.toStringNotEndDot());
            }

        } catch (SQLException e) {
            rollback(connection);
            throw new Exception("Chyba v databázi: " + e.getMessage() + " Obec má tyto hodnoty: " + ulice.toStringNotEndDot());
        } finally {
            DBUtil.closePreparedStatement(ps);
            ConnectionFactoryMyEditAdmin.close(connection);

        }
    }

    public void saveCastObec(Ulice ulice) throws Exception {
        Connection connection;
        if (ulice == null || ulice.getNazObce() == null || ulice.getNazCastiObce() == null) {
            throw new Exception("Část obce není správně definována. Má tyto hodnoty: " + ulice.toStringNotEndDot());
        }
        try {
            connection = ConnectionFactoryMyEditAdmin.getConnection();
        } catch (SQLException ex) {
            Logger.getLogger(UliceDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new Exception("Chyba při spojení: " + ex.getMessage() + " Část obce má tyto hodnoty: " + ulice.toStringNotEndDot());
        }
        PreparedStatement ps = null;
        int isInserted = 0;

        String query = "INSERT INTO cast_obce (naz_casti_obce, naz_obce) VALUES (?,?);";

        String nazObce = ulice.getNazObce();
        String nazCastiObce = ulice.getNazCastiObce();

        try {
            ps = connection.prepareStatement(query);
            ps.setString(1, nazCastiObce);
            ps.setString(2, nazObce);
            isInserted = ps.executeUpdate();
            connection.commit();
            if (isInserted == 0) {
                throw new Exception("Chyba při ukládání. Část obce má tyto hodnoty: " + ulice.toStringNotEndDot());
            }

        } catch (SQLException e) {
            rollback(connection);
            throw new Exception("Chyba v databázi: " + e.getMessage() + " Část obce má tyto hodnoty: " + ulice.toStringNotEndDot());
        } finally {
            DBUtil.closePreparedStatement(ps);
            ConnectionFactoryMyEditAdmin.close(connection);

        }
    }


    protected void rollback(Connection connection) {
        try {
            connection.rollback();
        } catch (Exception e) {
            log.log(Level.FINEST, "Rollback se nezdařil", e);
        }
    }

}
